﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using CourseUtils;


namespace KeyValue
{
    class Program
    {
        static Dictionary <int,float> ReadToDictionary(string path) // считываем данные из файла в словарь
        {
            string line = null;
            char separator = '\t';
            Dictionary<int, float> KeyAndValueDict = new Dictionary<int, float>();
            StreamReader f = File.OpenText(path);

            line = f.ReadLine();
            while (line != null) // построчно считываем пары ключ/значение
            {
                string[] KeyAndValueArr = line.Split(separator);
                int key = Convert.ToInt32(KeyAndValueArr[0]);
                float value = Convert.ToSingle(KeyAndValueArr[1]);
                KeyAndValueDict.Add(key, value);
                line = f.ReadLine();
            }
            
            return KeyAndValueDict;
        }
        //static int[] FindDeltaToArr (Dictionary<int,float>)
        //{
        //    Dictionary<int,float> dict = new Dictionary<int,float>();
        //}
        
        static void Main(string[] args)
        {
            int i = 0;

            int enteredkey = IOHelpers.ReadIntFromConsole("Enter a key from 0 to 360", 0, 360);
            
            Dictionary<int, float> KeyAndValue = ReadToDictionary("D:\\HW Courses\\AndreyP\\lab11_keyvalue\\values.txt");
            
            int[] delta = new int[KeyAndValue.Count]; // создаем массив, заполняем его дельтами значений разницы между введенным ключем и ключами из файла            
            
            foreach (KeyValuePair<int, float> kvp in KeyAndValue)
            {
                delta[i] = Math.Abs(enteredkey - kvp.Key);
                i++;
            }
            
            int minDelta = delta.Min(); 
            
            int minDeltaIndex = Array.FindLastIndex(delta, x => x == minDelta);
                               
            Console.WriteLine("The value matched to key is {0}",KeyAndValue.ElementAt(minDeltaIndex).Value);
            Console.ReadKey();
        }
        
    }
}
